<?php

class ListHistorialFlujo extends TPage {
//<editor-fold defaultstate="collapsed" desc="Verifica Usuario Logueado">
  /**
   * determina si el usuario esta logueado en el sistema
   * @author VSR, 01/01/2011
   */
  private function usuarioLogueado(){
    $estaLogueado = false;
    try {
      $session = new THttpSession;
      $session->open();
      $oUsuario = $session[Usuario::NOMBRE_ENTIDAD];
      if(isset($oUsuario)){
        $estaLogueado = true;
      }
    } catch (Exception $e) {
      $estaLogueado = false;
    }
    return $estaLogueado;
  }

  /**
   * redirecciona al login
   * @author VSR, 01/01/2011
   */
  private function redireccionarLogin(){
    $this->Response->redirect($this->Service->constructUrl("FrmLoginWf"));
  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Constantes">
  const SESION_DATOS = "arr";
  const CAMPO_ORDEN_DATAGRID = "CampoOrdenDataGrid";
  //funciones pagina
  const FUNCION_VER = "Ver";
  //indices arreglo
  const ARRAY_DETALLE = 0;

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Metodos Privados">
  /**
   * obtiene los registros desde la base de datos
   * @author VSR, 01/01/2011
   */
  private function obtenerDatos($idFlujo){
    try {
      $nombrePagina = Utilidades::obtenerNombrePaginaActual($this);
      $arr = WfFlujo::obtenerHistorialCompleto($idFlujo);
      Utilidades::grabarSessionPorNombre(self::SESION_DATOS.$nombrePagina, $arr);

    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * actualiza los controles de la pagina segun los datos obtenidos
   * @author VSR, 01/01/2011
   */
  private function actualizaInterfaz(){
    $totalRegistros = 0;
    try {
      $nombrePagina = Utilidades::obtenerNombrePaginaActual($this);
      $arr = Utilidades::obtenerSessionPorNombre(self::SESION_DATOS.$nombrePagina);

      if(is_null($arr)) {
        $totalRegistros = 0;
      } else {
        $totalRegistros = count($arr);
      }

      if($totalRegistros > 0) {
        $this->pnlHolderGrilla->Visible = true;
        //carga la grilla a utilizar
        $this->dgListado->Visible = true;
        $this->dgListado->DataSource = $arr;
        $this->dgListado->dataBind();
        Utilidades::mostrarTotalRegistrosGrilla($totalRegistros, $this->lblTotalRegistros);
      } else {
        $this->pnlHolderGrilla->Visible = false;
        $this->pnlMensajeUsuario->Visible = true;
        $textoMensaje = "No se encontraron registros";
        Utilidades::setPanelMensajeUsuario($this->pnlMensajeUsuario, $textoMensaje, "50%", Utilidades::ESTILO_MENSAJE_ADVERTENCIA);
        //oculta la grilla
        $this->dgListado->Visible = false;
      }

    } catch (Exception $e) {
        $this->pnlHolderGrilla->Visible = false;
        $this->pnlMensajeUsuario->Visible = true;
        $textoMensaje = "Ocurri&oacute; un error interno y no se pudo obtener el historial";
        Utilidades::setPanelMensajeUsuario($this->pnlMensajeUsuario, $textoMensaje, "50%", Utilidades::ESTILO_MENSAJE_ERROR);
        //oculta la grilla
        $this->dgListado->Visible = false;
    }
  }

  /**
   * inicializa algunos controles cuando se carga por primera vez la pagina
   * @param <type> $isPostBack
   * @author VSR, 01/01/2011
   */
  private function inicializaControles($isPostBack){
    try {
      //inicializa los controles del Correlativo y Locales
      $this->inicializaControlesEventoWindowOnLoad($isPostBack);

      //verifica los permisos sobre los controles
      $this->verificarPermisos();

    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * inicializa los controles al cargar la pagina
   * @param <type> $isPostBack
   * @author VSR, 01/01/2011
   */
  private function inicializaControlesEventoWindowOnLoad($isPostBack) {
    $nombrePagina = $this->obtenerNombrePagina();
    $sb = new StringBuilder();

    //se deja estructura por si se utiliza en algun momento
    //$sb->appendLine("-- codigo --");
    //$this->Page->ClientScript->registerEndScript("windowOnLoad", $sb->toString());
  }

  /**
   * verifica los permisos sobre los controles
   * @author VSR, 01/01/2011
   */
  private function verificarPermisos(){
    $paginaActual = Utilidades::obtenerNombrePaginaActual($this);
    //verifica los permisos para los controles
    $this->pnlContenido->Visible = true; //Utilidades::tienePermiso($paginaActual, self::FUNCION_VER);

    if(!$this->pnlContenido->Visible) {
      $this->pnlMensajeAcceso->Visible = true;
      Utilidades::setPanelMensajeUsuario($this->pnlMensajeAcceso, "No tiene permiso para ver esta p&aacute;gina", "50%", Utilidades::ESTILO_MENSAJE_ERROR);
    }
  }

  /**
   * obtiene nombre de la pagina actual
   * @return <type>
   * @author VSR, 01/01/2011
   */
  private function obtenerNombrePagina(){
    $nombrePagina = Utilidades::obtenerNombrePaginaActual($this);
    return $nombrePagina;
  }

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Eventos Controles">
  public function onLoad($param) {
    parent::onLoad($param);
    //si no esta conectado entonces lo redirecciona al login
    if(!$this->usuarioLogueado()){
      $this->redireccionarLogin();
    }
    $idFlujo = $this->Request["id"];
    $nombrePagina = $this->obtenerNombrePagina();
    $this->txtThemeBaseUrl->Value = $this->Page->Theme->BaseUrl;

    if(!$this->IsPostBack) {
      $this->obtenerDatos($idFlujo);
      $this->inicializaControles($this->IsPostBack);
      $this->actualizaInterfaz();
    }

  }

  public function onSortDataGrid($sender, $param) {
    $nombrePagina = Utilidades::obtenerNombrePaginaActual($this);
    $arr = Utilidades::obtenerSessionPorNombre(self::SESION_DATOS.$nombrePagina);
    $campoOrdenActualDataGrid = Utilidades::isNull(Utilidades::obtenerSessionPorNombre(self::CAMPO_ORDEN_DATAGRID),"");
    //obtiene el nuevo orden del arreglo
    $arr = Utilidades::obtenerSortArray($arr, $campoOrdenActualDataGrid, $param->SortExpression);
    //graba el orden actual
    Utilidades::grabarSessionPorNombre(self::CAMPO_ORDEN_DATAGRID, $campoOrdenActualDataGrid);
    //graba el array ordenado
    Utilidades::grabarSessionPorNombre(self::SESION_DATOS.$nombrePagina, $arr);
    //asigna
    $this->actualizaInterfaz();
  }

  public function onDataBoundDataGrid($sender, $param){
    $item = $param->Item;
    if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
    {
      $txtIdAprobador = $item->findControl("txtIdAprobador");
      $txtIdPasoEstado = $item->findControl("txtIdPasoEstado");
      $txtNombrePasoEstado = $item->findControl("txtNombrePasoEstado");
      $lblPasoEstado = $item->findControl("lblPasoEstado");
      $txtObservacion = $item->findControl("txtObservacion");
      $lblObservacion = $item->findControl("lblObservacion");
      $txtIdFlujoEstado = $item->findControl("txtIdFlujoEstado");
      $txtNombreFlujoEstado = $item->findControl("txtNombreFlujoEstado");
      $lblFlujoEstado = $item->findControl("lblFlujoEstado");

      //obtiene valores
      $idAprobador = $txtIdAprobador->Value;
      $idPasoEstado = $txtIdPasoEstado->Value;
      $observacion = $txtObservacion->Value;
      $idFlujoEstado = $txtIdFlujoEstado->Value;
      $observacion = (Utilidades::isNullOrEmpty($observacion)) ? "Enviado por sistema" : $observacion;
      
      if($idAprobador == "0"){
        $session = new THttpSession;
        $oUsuario = $session[Usuario::NOMBRE_ENTIDAD];
        $p = $oUsuario->getIdPerfil();
        $u = $oUsuario->getNombreCompleto();
        if($oUsuario->getIdPerfil() == Perfil::PERFIL_ADMINISTRADOR){
          $item->Visible = true;
        }else{
          $item->Visible = false;
        }
        
        $item->Attributes->Add("class","cssTextoReadOnly");
      }

      $imgTicketPaso = "";
      if($idPasoEstado == WfPasoEstado::ESTADO_APROBADO) {
        $imgTicketPaso = "&nbsp;&nbsp;<img src=\"".$this->Page->Theme->BaseUrl."/img/18/checkmark.png\" alt=\"\" title=\"\" style=\"vertical-align:middle;\" />";
      }else if($idPasoEstado == WfPasoEstado::ESTADO_CANCELADO) {
        $imgTicketPaso = "&nbsp;&nbsp;<img src=\"".$this->Page->Theme->BaseUrl."/img/18/cross.png\" alt=\"\" title=\"\" style=\"vertical-align:middle;\" />";
      }else if($idPasoEstado == WfPasoEstado::ESTADO_DEVUELTO) {
        $imgTicketPaso = "&nbsp;&nbsp;<img src=\"".$this->Page->Theme->BaseUrl."/img/18/redo.png\" alt=\"\" title=\"\" style=\"vertical-align:middle;\" />";
      }else if($idPasoEstado == WfPasoEstado::ESTADO_PENDIENTE) {
        $imgTicketPaso = "&nbsp;&nbsp;<img src=\"".$this->Page->Theme->BaseUrl."/img/18/clock.png\" alt=\"\" title=\"\" style=\"vertical-align:middle;\" />";
      }else if($idPasoEstado == WfPasoEstado::ESTADO_RECHAZADO) {
        $imgTicketPaso = "&nbsp;&nbsp;<img src=\"".$this->Page->Theme->BaseUrl."/img/18/cancel.png\" alt=\"\" title=\"\" style=\"vertical-align:middle;\" />";
      }

      $imgTicketFlujo = "";
      if($idFlujoEstado == WfFlujoEstado::ESTADO_APROBADO) {
        $imgTicketFlujo ="&nbsp;&nbsp;<img src=\"".$this->Page->Theme->BaseUrl."/img/18/checkmark.png\" alt=\"\" title=\"\" style=\"vertical-align:middle;\" />";
      }

      $lblPasoEstado->Text = $txtNombrePasoEstado->Value.$imgTicketPaso;
      $lblFlujoEstado->Text = $txtNombreFlujoEstado->Value.$imgTicketFlujo;
      $lblObservacion->Text = $observacion;

      //limpia controles
      $txtIdAprobador->Value = "";
      $txtIdPasoEstado->Value = "";
      $txtNombrePasoEstado->Value = "";
      $txtIdFlujoEstado->Value = "";
      $txtNombreFlujoEstado->Value = "";
      $txtObservacion->Value = "";

    }
  }

//</editor-fold>

  
}
?>
